ci: gate launcher release publication - #1120
Merged
Merged
Conversation
abrichr
force-pushed
the
codex/launcher-github-release-app
branch
from
August 26, 2026 20:57
98c1f87 to
7a087ae
Compare
abrichr
force-pushed
the
codex/launcher-github-release-app
branch
2 times, most recently
from
August 28, 2026 21:09
858864b to
891dd41
Compare
abrichr
force-pushed
the
codex/launcher-github-release-app
branch
from
August 29, 2026 14:48
9496ac9 to
8de9783
Compare
abrichr
marked this pull request as ready for review
August 29, 2026 14:49
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Release writes use repository-scoped
openadapt-releaseApp tokens. The workflow checks the App identity and release controls before it creates a tag, before PyPI receives a file, and before GitHub publishes the release.The release path also:
explicit-publishedplatform selection for all seven public packages. A new launcher candidate can use the reviewed published dependency set, but it can't move behind the published launcher.source-policy.public.jsonbefore attestation.skip-existing, then requires the complete immutable two-file release.The package-composition report in
docs/published-composition-1.16.0-flow-1.34.0.mdrecords one macOS arm64 run of the published launcher 1.16.0 and Flow 1.34.0 wheels. It binds the source commit, lifecycle script hash, Python 3.12, both wheel hashes, the verified result, and theRECONCILIATION_REQUIREDfault result. Its limits are in the report.Flow admission gate
The release now stages the exact Flow wheel and sdist selected by the reviewed platform manifest. It accepts only the canonical
openadapt-flowPyPI component inexplicit-publishedmode, downloads the exactfiles.pythonhosted.orgfiles, checks both manifest hashes, and builds the central Flow artifact inventory from those bytes.Both release runs call the central reusable verifier at exact commit
c05ff5c0633e0a1f63d9af74eeb69c31dac3e9ba. The dispatch run verifies Flow before tag creation. The tag-push run verifies Flow again before it builds or publishes the launcher. The verifier checks the registered signed admission, current authority and revocation state, exact Flow repository, tag, source commit, version, and the staged artifact bytes.Commit
c05ff5c0633e0a1f63d9af74eeb69c31dac3e9baadds inactive qualification issuer workflows. Its production release verifier is unchanged from989681f6f475616b7e2cb72360c716db0927f7ad.Hold conditions
The path fails closed today:
c05ff5c0633e0a1f63d9af74eeb69c31dac3e9bahas revision 1, no entries, and no signer registry. Central also has no production release admission issuer workflow.latest-published. A release change must commit a reviewedexplicit-publishedselection.openadapt-releaseApp hasContents: writeandMetadata: read, but it doesn't haveAdministration: read.refs/tags/v*.release-identityandpypienvironments have no protection rules or deployment branch policy.This PR stays draft while those controls and the exact release admission remain open.
Checks
a1c0b320be1e4d3ee50417e4732cd43504d691fa9496ac97e9735a6d1904233041b37542973db9ceactionlint, release lock, source-boundary, and diff checks passedfe1cf559e30ee966fcd99b5ff1c11b767a67faf56179516bbae87de7033bd7a525f2ed8962939f2a0d5fe9aaea4d3e4f3ad5d0153185c2ca6b3ec89f01c2d989latest-publishedmanifest failed the new release selector as requiredKnown follow-ups